Forum de Gentil Kiwi . com

Le forum officiel du site, discussions, aide, astuces...

Vous n'êtes pas identifié.

#1 21-05-2007 23:43:23

LtD
Nouveau membre
Lieu: Aquitaine
Date d'inscription: 21-05-2007
Messages: 5
Site web

[IceCast] Script pour Current Listeners

Suite à ce message http://www.gentilkiwi.com/forum/message-105.htm#p105 j'aimerais y ajouté le nombre d'auditeurs en ligne (Current Listeners) si possible smile

Code:

<?php

function connect_icecast($host, $port)
{
    $fp = @fsockopen($host, $port, $errno, $errstr, 3);
    
    if(!$fp)
        return false;

    fputs($fp, 'GET /status2.xsl' . " HTTP/1.0\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)\r\n\r\n");
    
    $page = '';
    while(!feof($fp))
        $page .= fread($fp, 1000);
    
    fclose($fp);
    return $page;
}

$page = connect_icecast('metalizer.fr', 8000);
preg_match_all('`, - ([^,]*)`i', $page, $matches);

echo 'En ce moment : <strong>' . $matches[1][1] . '</strong><br />';

?>

Merci d'avance pour votre aide et vos conseils !

Hors ligne

 

#2 22-05-2007 18:29:04

Gentil Kiwi
Administrateur de Kiwis
Lieu: Vers Paris
Date d'inscription: 24-07-2006
Messages: 422
Site web

Re: [IceCast] Script pour Current Listeners

Dans tous les cas je prévois de faire un script plus complet pour icecast wink Mais tu es conscient que c'est pour serveur Icecast et non ShoutCast ?

Hors ligne

 

#3 22-05-2007 18:30:57

LtD
Nouveau membre
Lieu: Aquitaine
Date d'inscription: 21-05-2007
Messages: 5
Site web

Re: [IceCast] Script pour Current Listeners

ah je n'es pas fait attention hmm pourtant ca marche lol

Pas de soucis je met en suspend pendant la création de ton script smile

Merci

Hors ligne

 

#4 22-05-2007 18:36:03

Gentil Kiwi
Administrateur de Kiwis
Lieu: Vers Paris
Date d'inscription: 24-07-2006
Messages: 422
Site web

Re: [IceCast] Script pour Current Listeners

Tu as besoin d'un script pour ShoutCast ou Icecast alors ?

Pour un ShoutCast, le script complet se trouve ici :

http://www.gentilkiwi.com/documentation … utcast.htm

Hors ligne

 

#5 22-05-2007 20:17:37

LtD
Nouveau membre
Lieu: Aquitaine
Date d'inscription: 21-05-2007
Messages: 5
Site web

Re: [IceCast] Script pour Current Listeners

Icecast, excuse d'avoir oublié de précisé

Hors ligne

 

#6 22-05-2007 23:54:43

Gentil Kiwi
Administrateur de Kiwis
Lieu: Vers Paris
Date d'inscription: 24-07-2006
Messages: 422
Site web

Re: [IceCast] Script pour Current Listeners

Voila, à prioris cela fonctionne, MAIS il y a un bémol :

Je me fie au fichier 'status2.xsl' qui n'est pratiquement pas modifié sur les serveurs IceCast (contrairement à la page d'accueil).

Or ce fichier ne donne pas les informations qu'il devrait donner wink Mais pour ce qui est du nombre d'auditeurs, du nom du point de montage et du titre en cours, il fait son boulot wink Même si il est construit de manière incorrecte....

Voici donc un petit script dont le résultat est le suivant (par exemple) :

Code:

Array
(
    [/animateur.mp3] => Array
        (
            [name] => 
            [listeners] => 0
            [description] => 
            [artist] => 
            [title] => 
            [url]=> 
        )

    [/playlist.mp3] => Array
        (
            [name] => 
            [listeners] => 1
            [description] => 
            [artist] => 
            [title] => Killing Joke - Eighties
            [url]=> 
        )

)

Et évidement le script en lui même, mais pas encore testé à grande échelle wink :

Code:

<?php

function connect_icecast($host, $port)
{
    $fp = @fsockopen($host, $port, $errno, $errstr, 3);
    
    if(!$fp)
        return false;

    fputs($fp, 'GET /status2.xsl' . " HTTP/1.0\r\nUser-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.9)\r\n\r\n");
    
    $page = '';
    while(!feof($fp))
        $page .= fread($fp, 1000);
    
    fclose($fp);
    return $page;
}

function tab_icecast($host, $port)
{
    $contenu = connect_icecast($host, $port);

    if ($contenu)
    {
        $tabChamps = array(2 => 'name', 3 => 'listeners', 4 => 'description', 5 => 'artist', 6 => 'title', 7 => 'url');

        if (preg_match_all('`(/[^,]*),,([^,]*),([^,]*),([^,]*),([^-]*) - ([^,]*),([^,<\/]*)`', $contenu, $resultat))
        {
         foreach($resultat[1] as $numPoint => $mountName)
                  foreach ($tabChamps as $index => $champ)
                     $tabIce[$mountName][$champ] = $resultat[$index][$numPoint];

             return $tabIce;
        }
    else
        return false;
    }
    else
        return false;
}


$tabIceCast = tab_icecast('www.metalizer.fr', 8000);

if($tabIceCast)
{
     echo '<pre>';
          print_r($tabIceCast);
     echo '</pre>';
}
else
    echo 'Parsing impossible';

?>

Il doit t'être facile de récupérer le nombre d'auditeur d'un point en particulier via cette syntaxe : tabIceCast['/point']['listeners'] wink

Astuce : si l'on a accès au fichier status2.xsl en écriture, on peut aisément corriger les variables incorrecte de ce fichier pour afficher toutes les bonnes valeurs :

Commençons par modifier la fin de 'expression régulière du script :

Trouver :

Code:

([^,<\/]*)

Remplacer par :

Code:

([^,]*)

Dans le fichier status2.xsl :
Trouver :

Code:

<xsl:for-each select="source">
<xsl:value-of select="@mount" />,,<xsl:value-of select="server_name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="server_description" />,<xsl:value-of select="artist" /> - <xsl:value-of select="title" />,<xsl:value-of select="server_url" />,
</xsl:for-each>

Remplacer par :

Code:

<xsl:for-each select="source">
<xsl:value-of select="@mount" />,,<xsl:value-of select="server_name" />,<xsl:value-of select="listeners" />,<xsl:value-of select="server_description" />,<xsl:value-of select="artist" /> - <xsl:value-of select="title" />,<xsl:value-of select="server_url" />,
</xsl:for-each>

Le résultat n'en est que meilleur :

Code:

    [/test.mp3] => Array
        (
            [name] => Kiwi Test
            [listeners] => 1
            [description] => Kiwi Test
            [artist] => 
            [title] => Gwen Stefani - Yummy 
            [url]=> http://www.gentilkiwi.com/
        )

Hors ligne

 

#7 23-05-2007 12:47:26

LtD
Nouveau membre
Lieu: Aquitaine
Date d'inscription: 21-05-2007
Messages: 5
Site web

Re: [IceCast] Script pour Current Listeners

Ah oui trés bien, bon boulot smile merci beaucoup j'ai testé et ca marche trés bien, parcontre l'affichage hmm

Derniére question, je voulais savoir si il été possible de mettre sous cette forme :

Sur /animateur.mp3 il y a X auditeurs. Titre en cours : X

Sur /playlist.mp3 il y a X auditeurs. Titre en cours : X

Quelque chose dans ce style la, merci wink

Hors ligne

 

#8 23-05-2007 13:49:18

Gentil Kiwi
Administrateur de Kiwis
Lieu: Vers Paris
Date d'inscription: 24-07-2006
Messages: 422
Site web

Re: [IceCast] Script pour Current Listeners

Tu ne dois pas connaitre le PHP toi ^^, parce qu'il n'y a plus qu'à sortir les infos du tableau wink

Code:

<?php

[...]

foreach($tabIceCast as $key => $value)
        echo '<p>Sur <strong>' . $key  . '</strong> il y a <strong>' . $value['listeners'] . '</strong> auditeurs. Titre en cours : <strong>' . $value['title'] . '</strong></p>';
?>

Je fais ceci depuis ma salle de cours, donc je ne sais pas si cela fonctionne, à toi de voir.

Hors ligne

 

#9 23-05-2007 18:17:31

LtD
Nouveau membre
Lieu: Aquitaine
Date d'inscription: 21-05-2007
Messages: 5
Site web

Re: [IceCast] Script pour Current Listeners

Oui je ne my connais pas trop en php tongue en tout cas rapide et efficace tes réponses je te remercie beaucoup, je ferais attention pour la prochaine fois smile

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr